package top.minuy.structure.hash;

/**
 * 散列表
 * 使用链表作为散列表冲突解决方案
 *
 * @author Minuy
 * @time 13:42
 * @date 2021/11/7
 */
public interface HashTable<K,V>{
    /**
     * 添加元素到散列表中
     * @param key 元素的键
     * @param val 元素的值
     */
    void add(K key,V val);

    /**
     * 从散列表中删除元素
     * @param key 要删除元素的键
     * @return 被删除的元素值
     */
    V remove(K key);

    /**
     * 从散列表中获取值
     * @param key 要获取的元素的键
     * @return 被获取的元素的值
     */
    V get(K key);

    /**
     * 验证元素是否存在散列表中
     * @param key 要验证元素的键
     * @return 是否存在散列表中
     */
    boolean contains(K key);

    /**
     * 修改散列表中的元素值
     * @param key 要修改的元素的键
     * @param val 元素被修改之后的值
     */
    void set(K key,V val);

    /**
     * 获取当前散列表存储元素的个数
     * @return 当前散列表存储元素的个数
     */
    int getSize();

    /**
     * 返回当前散列表是否为空
     * @return 散列表是否为空
     */
    boolean isEmpty();
}
